// internal/planner/types/plan.go
package types

// LogicalPlan 定义逻辑计划的基本接口
type LogicalPlan interface {
    // 返回计划节点类型
    Type() PlanType
    
    // 返回子节点
    Children() []LogicalPlan
    
    // 返回节点输出的schema
    Schema() *Schema
    
    // 返回可读表示
    String() string
}

// PhysicalPlan 定义物理计划的基本接口
type PhysicalPlan interface {
    // 返回计划节点类型
    Type() PlanType
    
    // 返回子节点
    Children() []PhysicalPlan
    
    // 返回节点输出的schema
    Schema() *Schema
    
    // 返回可读表示
    String() string
    
    // 返回成本估算
    Cost() float64
}

// PlanType 表示计划节点类型
type PlanType int

const (
    PlanUnknown PlanType = iota
    // 逻辑计划类型
    PlanLogicalScan
    PlanLogicalFilter
    PlanLogicalProject
    PlanLogicalJoin
    // 物理计划类型
    PlanPhysicalScan
    PlanPhysicalFilter
    PlanPhysicalProject
    PlanPhysicalHashJoin
    PlanPhysicalNestedLoopJoin
)

// Schema定义输出列结构
type Schema struct {
    Columns []*Column
}

// Column定义列信息
type Column struct {
    Name     string
    Table    string
    DataType DataType
}

// DataType表示数据类型
type DataType int

const (
    TypeUnknown DataType = iota
    TypeInteger
    TypeFloat
    TypeString
    TypeBoolean
    TypeDate
    TypeTimestamp
)